Classificador de análise de crédito para empréstimo habitacional

DEFINAÇÃO DO PROBLEMA

A Império precisa automatizar seu processo de análise de crédito imobiliário para pessoas físicas de modo a melhorar a satisfação de seus clientes que hoje aguardam cerca de 7 dias úteis no recebimento da resposta de seu pedido de empréstimo, além de diminuir seus custos nesse processo, pois demanda muito tempo e muito trabalho dos colaboradores que poderiam estar se dedicando em outras tarefas da empresa.

Para automatizar esse processo, de modo que aconteça em tempo real, gostaríamos de fazer sua análise através do formulário online de solicitação de crédito que o cliente irá preencher, contendo os seguintes campos: gênero, estado civil, educação, número de dependentes, renda, valor do empréstimo, histórico de crédito e outros. Para facilitar o entendimento do problema e da solução a ser proposta utilizamos a técnica do 5WS, que consiste em responder as seguintes perguntas:

Why? Para automatizar o processo de análise de crédito da empresa, melhorando a satisfação do cliente e tornando o procedimento da empresa mais ágil. Who? Os dados utilizados são dos clientes da empresa que neste trabalho é denominada como Império. What? O objetivo da análise é identificar em tempo real se o cliente está apto ou não, a receber o empréstimo desejado de acordo com as políticas de crédito da Império. Where? No site da Império, em que será disponibilizado o formulário online de solicitação de crédito. When? No momento da interação entre o cliente e a Império.

Coleta de dados

Base de dados coletada no seguinte link: https://www.kaggle.com/burak3ergun/loan-data-set

Lendo duas bases de dados e transformando em dataframes

PROCESSAMENTO/TRATAMENTO DOS DADOS

Balanceando a base de dados

Depois de verificar que a quantidade de dados com informação positiva ( 781 ) foi bem maior que negativa, temos que balancear esses dados para o modelo ser mais acertivo, o balanceamento está sendo feito logo abaixo, foi utilizado o o método sample para filtrar 360 registros positivos e ficar próximo dos 355 que já tinhamos do negativo.

Verificando Missing Values ( valores faltantes )

Preechendo Missing Values:

Checando novamente Missing Values depois de preencher os mesmos

ANÁLISE/EXPLORAÇÃO DOS DADOS

Analisando a Correlação das colunas da base de dados

Uma das formas mais simples para começar a entender como suas variáveis se relacionam é através de uma Matriz de Correlação. Trata-se de uma tabela que mostra os coeficientes de correlação entre as variáveis. O Pandas possui a função .corr(), que retorna os coeficientes para cada feature do seu dataset. No exemplo abaixo criei uma variávél para receber as correlações e utilizei o método heatmap da biblioteca seaborn para visualizarmos em forma de gráfico de uma matriz:

A biblioteca Plotly do Python pode ser muito útil para visualização de dados e compreensão dos dados de forma simples e fácil. Objetos de gráfico Plotly são uma interface de alto nível para plotagem que são fáceis de usar.

A função px.scatter () é usada para criar o gráfico de dispersão e pode ser usada com dataframes do pandas. Cada linha de dataframe é representada por uma marca de símbolo no espaço 2D no gráfico de dispersão.

O boxplot ou diagrama de caixa é uma ferramenta gráfica que permite visualizar a distribuição e valores discrepantes (outliers) dos dados, fornecendo assim um meio complementar para desenvolver uma perspectiva sobre o caráter dos dados. Além disso, o boxplot também é uma disposição gráfica comparativa.

As medidas de estatísticas descritivas como o mínimo, máximo, primeiro quartil, segundo quartil ou mediana e o terceiro quartil formam o boxplot.

Observe a figura do boxplot. Note que o local onde a haste vertical começa (de baixo para cima) indica o mínimo (excetuando algum possível valor extremo ou outlier) e, onde a haste termina indica o máximo (também excetuando algum possível outlier).

No gráfico abaixo vimos que tivemos alguns valores discrepantes para mais em valores pedidos para o empréstimo.

Observe a figura do boxplot. Note que o local onde a haste vertical começa (de baixo para cima) indica o mínimo (excetuando algum possível valor extremo ou outlier) e, onde a haste termina indica o máximo (também excetuando algum possível outlier).

No gráfico abaixo vimos que tivemos alguns valores discrepantes para mais em valores das rendas dos solicitantes.

No gráfico de dispersão abaixo usamos as váriáveis Valor do Empréstimo e Prazo do empréstimo e vimos que a maior concentração fica para valores de 200 a 300 mil e a maioria dos empréstimos são na faixa de 200 a 360 meses de prazo de pagamento. LoanAmount vs Loan_Amount_Term (Valor do Empréstimo e Prazo do empréstimo)

Um histograma consiste em um gráfico de barras que demonstra uma distribuição de frequências, onde a base de cada uma das barras representa uma classe, e a altura a quantidade ou frequência absoluta com que o valor da classe ocorre. Ao mesmo tempo, pode ser utilizado como um indicador de dispersão de processos.

No gráfico abaixo vimos com muita clareza que 360 vezes foi o prazo mais escolhido da nossa base de dados.

Módulo figure_factory do Plotly

A API Python do Plotly contém um módulo de figure_factory que inclui muitas funções que criam tipos de gráficos exclusivos que ainda não estão incluídos no plotly.js , a biblioteca gráfica de código aberto do Plotly. As funções do figure_factory criam uma figura completa, portanto, alguns recursos do Plotly, como o subplotting, devem ser implementados de maneira um pouco diferente com esses gráficos.

No gráfico abaixo visualizando a distribuição da variável ApplicantIncome ( Renda ) e vimos que a maior ocncentração está em rendas até $20 mil.

Transformando dados categóricos

Várias colunas do dataframe são categóricas, precisamos transforma-las, pois os algorítmos de classificação funcionam com dados numéricos, são elas: Gender, Married, Education, Self_Employed & Property_Area columns.

CRIAÇÃO DE MODELO DE ML

Para nosso modelo foram escolhidos algoritmos de classificação utilizando a bilbioteca sklearn.

O que são algoritmos de classificação?

Focaremos em algoritmos de classificação. Mas o que é isso?

Quando você possui um conjunto de dados divididos em grupos ou classes e deseja prever a classe de novos objetos adicionados a base, isto é classificar.

Veja este exemplo de classificação na prática: Precisamos classificar uma análise de crédito habitacional e nossa base tem como classivicassão Y para Aprovado e N para Negado. O trabalho de compreender o padrão existente entre a classe e determinar a qual classe uma nova solicitação de empréstimo irá contemplar, é classificar.

Algoritmo, também chamado de método, nada mais é do que um passo-a-passo a ser seguido para realizar alguma tarefa específica. E você pode executar esse passo-a-passo como quiser: fazendo as contas na mão, usando uma calculadora. Agora, quando um computador é capaz de fazer estas tarefas com base nas informações fornecidas a ele, isso é chamado de machine learning.

Para nosso modelo foi feita uma análise com 3 algoritmos de classificação, para saber o que tem melhor desempenho com os dados em questão e escolhermos o que vamos utilizar. Os algoritimo escolhidos para essa análise foram KNN, SVM e Random Forest.

PIPELINE

A forma mais conhecida de escrever códigos de machine learning e a que é geralmente ensinada é usando paradigma de programação procedural, onde cada etapa do código é feita em sequência, seguindo uma ordem específica e usando funções provenientes de pacotes ou escritas pelo usuário ou por terceiros. Códigos escritos nesse estilo não são os melhores para serem postos em produção porque geralmente não permitem a criação de um padrão de escrita de código que seja de fácil entendimento e manuntenção.

A classe Pipeline é uma funcionalidade do Scikit-Learn que ajuda criar códigos que possuam um padrão que possa ser facilmente entendido e compartilhando entre times de cientista e engenheiro de dados. Em sua essência, esse tipo de escrever código usa o estilo de programação Orientada à Objetos, mas não precisaremos tocar nos conceitos de programação OO para aprender a usar o Pipeline.

Códigos de machine-learning são melhores escritos através de pipelines, que em essência fazem o output de uma dada transformação nos dados se tornarem o input para uma outra transformação que será aplicada nos dados.

No código abaixo usamos pipeline para os três algoritmos que foram escolhidos.

GridSearch

O GridSearchCV é uma ferramenta usada para automatizar o processo de ajuste dos parâmetros de um algoritmo, pois ele fará de maneira sistemática diversas combinações dos parâmetros e depois de avaliá-los os armazenará em um único objeto. O GridSearchCV é um módulo do ScikitLearn e é amplamente usado para automatizar grande parte do processo de tuning.

Valores para Grid

No código abaixo criamos uma lista para alimentar as grids que vão ser utilizadas no parâmetro do GridSearch para testar as combinações.

Construindo GridSearch

Computando o GridSearch para Random Forest

O método fit() é utilizado para treinar o algorítimo e verificar seu desempenho.

Computando o GridSearch para SVM

O método fit() é utilizado para treinar o algorítimo e verificar seu desempenho.

Computando o GridSearch para KNN

O método fit() é utilizado para treinar o algorítimo e verificar seu desempenho.

Escolha do algorítimo de melhor desempenho

Depois de verificar a melhor acurácia entres os três algoritmos, foi visto que o KNN foi que teve o melhor desempenho, com isso foi o escolhido para ser utilizado em nosso modelo.

INTERPRETAÇÃO DO RESULTADO

Métricas de Validação

As métricas de validação são utilizadas para analisar a qualidade dos modelos de Machine Learning. Ou seja, traz a informação do desempenho do modelo em dados desconhecidos.

As métricas de validação são utilizadas para analisar a qualidade dos modelos de Machine Learning. Ou seja, traz a informação do desempenho do modelo em dados desconhecidos.

Lembre-se, nos modelos de aprendizado supervisionado o objetivo é tentar estimar (prever) uma determinada variável. Por exemplo, classificar se o empréstimo vai ser aprovado ou não.

Assim, analisando as diferentes métricas de validação dos modelos conseguimos analisar o poder preditivo do mesmo, antes de colocar em produção.

Já pensou fazer um modelo que consiga prever 99% dos dados e quando você entrega para seu superior ou cliente, o modelo não consegue acertar nada. Imagina o prejuízo financeiro da empresa e da sua reputação.

Existem diferentes métricas e algumas funcionam melhor para um determinado problema. Escolher uma boa métrica para avaliar o modelo é tão importante quanto escolher um bom modelo. Nos modelos de classificação a maioria das métricas são baseadas na matriz de confusão.

OBS: Utilizo a palavra prever para ajudar no entendimento do conceito, mas a palavra correta é estimar. Os modelos de classificação estimam uma probabilidade da observação pertencer a uma classe. Quanto mais alta essa probabilidade, maior a chance da observação pertencer aquela classe.

No código abaixo temos algumas métricas para vermos o poder preditivo do nosso modelo.

COMUNICAÇÃO DOS RESULTADOS

Persistindo o modelo de Machine Learning para o disco.

Persistir o modelo para o disco, nada mais é de tirar da memória o modelo e coloca no seu disco físico, para com isso ser utilizado da forma que você quiser, ser implemntado em um sistema de terceiros por exemplo.

Carregando o modelo a partir do disco para a memória.

Lendo o modelo que está no disco.

Verificando o Dataset final gerado.

Teste de Classificação.

Aque estamos testando nosso modelo, passando para ele uma simulação de dados novos para vermos se ele vai aprovar ou não o empréstimo, o resultado vai ser 0 ou 1 que posteriormente pode ser tratado para o valor Y ou N como na base.

Um exemplo de utilização do modelo é ser criada uma pagina web com os campos solicitados pelo nosso modelo e retornar se foi aprovado ou não de acordo com a resposta do modelo.

Probabilidades de Classes

O método predict_proba é utilizado para saber quais as probabilidades de classes a serem retornadas pelo modelo.